home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 11 / Cream of the Crop 11-2.iso / extra_2 / asm106.zip / DIARY.ASM < prev    next >
Assembly Source File  |  1995-11-09  |  12KB  |  500 lines

  1. ; +---------------------------------------------------+ ;
  2. ; | Sample program DIARY for use with Magic Assembler | ;
  3. ; +---------------------------------------------------+ ;
  4.         mov     ah,09
  5.         mov     dx,offset(headtxt)
  6.         int     21
  7.         cmp     byte [0081],0d
  8.         jne     @1
  9.         mov     dx,offset(syntax)
  10.         jmp     error
  11. @1      cmp     byte [0082],'A'
  12.         je      @2
  13.         cmp     byte [0082],'a'
  14.         je      @2
  15.         cmp     byte [0082],'!'
  16.         jne     @10
  17.         jmp     @f
  18. @10     cmp     byte [0082],'D'
  19.         je      @1a
  20.         cmp     byte [0082],'d'
  21.         je      @1a
  22.         jmps    @1b
  23. @1a     jmp     @1d
  24. @1b     cmp     byte [0082],'O'
  25.         je      @1e
  26.         cmp     byte [0082],'o'
  27.         je      @1e
  28.         jmps    @29
  29. @1e     jmp     @1f
  30. @29     cmp     byte [0082],'S'
  31.         je      @2c
  32.         cmp     byte [0082],'s'
  33.         je      @2c
  34.         jmps    @2d
  35. @2c     jmp     @2e
  36. @2d     mov     dx,offset(unpar)
  37.         jmp     error
  38. ; Add item
  39. @2      mov     ah,3c
  40.         mov     cx,0020
  41.         mov     dx,offset(tempnam)
  42.         int     21
  43.         mov     thandle,ax
  44.         mov     ax,3d00
  45.         mov     dx,offset(datanam)
  46.         int     21
  47.         jc      @3
  48. ;Copy the data
  49.         mov     bx,ax
  50. @5      mov     ah,3f
  51.         mov     cx,0003
  52.         mov     dx,offset(date)
  53.         int     21
  54.         cmp     ax,cx
  55.         jne     @4
  56.         mov     ah,3f
  57.         mov     cx,0001
  58.         mov     dx,offset(tsize)
  59.         int     21
  60.         mov     ah,3f
  61.         mov     ch,0
  62.         mov     cl,tsize
  63.         mov     dx,offset(txt)
  64.         int     21
  65.         push    bx
  66.         mov     ah,40
  67.         mov     bx,thandle
  68.         mov     ch,00
  69.         mov     cl,tsize
  70.         add     cx,0004
  71.         mov     dx,offset(date)
  72.         int     21
  73.         pop     bx
  74.         jmps    @5
  75. ;Close and delete DIARY.DAT
  76. @4      mov     ah,3e
  77.         int     21
  78.         mov     ah,41
  79.         mov     dx,offset(datanam)
  80.         int     21
  81. ;Ask for data
  82. @3      mov     ah,09
  83.         mov     dx,offset(askdate)
  84.         int     21
  85. @9      call    readdat
  86.         mov     ah,09
  87.         mov     dx,offset(message)
  88.         int     21
  89.         mov     tsize,00
  90.         mov     di,offset(txt)
  91. @e      mov     ah,00
  92.         int     16
  93.         cmp     al,0d
  94.         je      @c
  95.         cmp     al,08
  96.         jne     @d
  97.         cmp     tsize,00
  98.         je      @e
  99.         mov     ah,09
  100.         mov     dx,offset(bs)
  101.         int     21
  102.         dec     di
  103.         dec     tsize
  104.         jmps    @e
  105. @d      inc     tsize
  106.         stosb
  107.         mov     ah,0e
  108.         mov     bx,0007
  109.         int     10
  110.         jmps    @e
  111.  
  112. ;End of lineread
  113. @c      mov     ah,40
  114.         mov     bx,thandle
  115.         mov     ch,00
  116.         mov     cl,tsize
  117.         add     cx,0004
  118.         mov     dx,offset(date)
  119.         int     21
  120.         mov     ah,3e
  121.         int     21
  122.         mov     ah,56
  123.         mov     dx,offset(tempnam)
  124.         mov     di,offset(datanam)
  125.         int     21
  126.         int     20
  127. ;Look for warning
  128. @f      mov     ah,2a
  129.         int     21
  130.         sub     cx,076c
  131.         mov     byte [offset(cdate)],dl
  132.         mov     byte [offset(cdate)+1],dh
  133.         mov     byte [offset(cdate)+2],cl
  134. @1c     mov     ax,3d00
  135.         mov     dx,offset(datanam)
  136.         int     21
  137.         jnc     @11
  138.         mov     dx,offset(datanf)
  139.         jmp     error
  140. @11     push    ax
  141.         mov     ah,3c
  142.         mov     cx,0020
  143.         mov     dx,offset(tempnam)
  144.         int     21
  145.         mov     thandle,ax
  146.         pop     ax
  147.         mov     bx,ax
  148. @19     mov     ah,3f
  149.         mov     cx,0003
  150.         mov     dx,offset(date)
  151.         int     21
  152.         cmp     ax,cx
  153.         jne     @12
  154.         mov     ah,3f
  155.         mov     cx,0001
  156.         mov     dx,offset(tsize)
  157.         int     21
  158.         mov     ah,3f
  159.         mov     ch,00
  160.         mov     cl,tsize
  161.         mov     dx,offset(txt)
  162.         int     21
  163.         mov     si,offset(cdate)
  164.         mov     di,offset(date)
  165.         mov     cx,0003
  166. @13     cmpsb   
  167.         jne     @14
  168.         loop    @13
  169.         call    delit
  170.         cmp     al,01
  171.         jne     @14
  172.         jmps    @19
  173. @14     push    bx
  174.         mov     ah,40
  175.         mov     bx,thandle
  176.         mov     ch,00
  177.         mov     cl,tsize
  178.         add     cx,0004
  179.         mov     dx,offset(date)
  180.         int     21
  181.         pop     bx
  182.         jmps    @19
  183. ;End of file
  184. @12     mov     ah,3e
  185.         int     21
  186.         mov     ah,41
  187.         mov     dx,offset(datanam)
  188.         int     21
  189.         mov     ah,3e
  190.         mov     bx,thandle
  191.         int     21
  192.         mov     ah,56
  193.         mov     dx,offset(tempnam)
  194.         mov     di,offset(datanam)
  195.         int     21
  196.         int     20
  197. ;Delete item
  198. @1d     mov     ah,09
  199.         mov     dx,offset(wdel)
  200.         int     21
  201.         call    readdat
  202.         mov     si,offset(date)
  203.         mov     di,offset(cdate)
  204.         mov     cx,0003
  205. @3c     movsb
  206.         loop    @3c
  207.         jmp     @1c
  208. ;Delete old dates
  209. @1f     mov     ah,2a
  210.         int     21
  211.         mov     bx,offset(cdate)
  212.         mov     [offset(cdate)],dl
  213.         mov     [offset(cdate)+1],dh
  214.         sub     cx,076c
  215.         mov     [offset(cdate)+2],cl
  216.         mov     ax,3d00
  217.         mov     dx,offset(datanam)
  218.         int     21
  219.         jnc     @21
  220.         mov     dx,offset(datanf)
  221.         jmp     error
  222. @21     push    ax
  223.         mov     ah,3c
  224.         mov     cx,0020
  225.         mov     dx,offset(tempnam)
  226.         int     21
  227.         mov     thandle,ax
  228.         pop     bx
  229. @25     mov     ah,3f
  230.         mov     cx,0003
  231.         mov     dx,offset(date)
  232.         int     21
  233.         cmp     ax,cx
  234.         jne     @22
  235.         mov     ah,3f
  236.         mov     cx,0001
  237.         mov     dx,offset(tsize)
  238.         int     21
  239.         mov     ah,3f
  240.         mov     ch,00
  241.         mov     cl,tsize
  242.         mov     dx,offset(txt)
  243.         int     21
  244.         mov     si,offset(date)+2
  245.         mov     di,offset(cdate)+2
  246.         mov     cx,0003
  247. @23     std
  248.         cmpsb
  249.         cld
  250.         ja      @20
  251.         jb      @24
  252.         loop    @23
  253. @24     call    delit
  254.         cmp     al,01
  255.         je      @25
  256. ;Still future
  257. @20     push    bx
  258.         mov     ah,40
  259.         mov     bx,thandle
  260.         mov     ch,00
  261.         mov     cl,tsize
  262.         add     cx,0004
  263.         mov     dx,offset(date)
  264.         int     21
  265.         pop     bx
  266.         jmps    @25
  267. ;End of file
  268. @22     mov     ah,3e
  269.         int     21
  270.         mov     ah,3e
  271.         mov     bx,thandle
  272.         int     21
  273.         mov     ah,41
  274.         mov     dx,offset(datanam)
  275.         int     21
  276.         mov     ah,56
  277.         mov     dx,offset(tempnam)
  278.         mov     di,offset(datanam)
  279.         int     21
  280.         int     20
  281. ;Show dates
  282. @2e     mov     ax,3d00
  283.         mov     dx,offset(datanam)
  284.         int     21
  285.         jnc     @2f
  286.         mov     dx,offset(datanf)
  287.         jmp     error
  288. @2f     mov     bx,ax
  289. @3b     mov     ah,3f
  290.         mov     cx,0003
  291.         mov     dx,offset(date)
  292.         int     21
  293.         cmp     ax,cx
  294.         jne     @30
  295.         mov     ah,3f
  296.         mov     cx,0001
  297.         mov     dx,offset(tsize)
  298.         int     21
  299.         mov     cl,tsize
  300.         mov     ch,00
  301.         mov     ah,3f
  302.         mov     dx,offset(txt)
  303.         int     21
  304.         mov     si,ax
  305.         mov     byte [offset(txt)+si],'$'
  306.         mov     al,date
  307.         call    shownum
  308.         push    bx
  309.         mov     ah,09
  310.         mov     dx,offset(slash)
  311.         int     21
  312.         mov     al,[offset(date)+01]
  313.         call    shownum
  314.         mov     ah,09
  315.         mov     dx,offset(slash)
  316.         int     21
  317.         mov     al,[offset(date)+02]
  318.         call    shownum
  319.         mov     ah,09
  320.         mov     dx,offset(space)
  321.         int     21
  322.         mov     ah,09
  323.         mov     dx,offset(txt)
  324.         int     21
  325.         mov     ah,09
  326.         mov     dx,offset(crlf)
  327.         int     21
  328.         pop     bx
  329.         jmps    @3b
  330. @30     mov     ah,3e
  331.         int     21
  332.         int     20
  333.  
  334. delit   push    bx
  335.         mov     al,date
  336.         call    shownum
  337.         mov     ah,09
  338.         mov     dx,offset(slash)
  339.         int     21
  340.         mov     al,[offset(date)+01]
  341.         call    shownum
  342.         mov     ah,09
  343.         mov     dx,offset(slash)
  344.         int     21
  345.         mov     al,[offset(date)+02]
  346.         call    shownum
  347.         mov     ah,09
  348.         mov     dx,offset(space)
  349.         int     21
  350.         mov     bh,00
  351.         mov     bl,tsize
  352.         mov     byte [offset(txt)+bx],'$'
  353.         pop     bx
  354.         mov     ah,09
  355.         mov     dx,offset(txt)
  356.         int     21
  357.         mov     ah,09
  358.         mov     dx,offset(delete)
  359.         int     21
  360.         call    flag
  361.         push    ax
  362.         mov     ah,09
  363.         mov     dx,offset(crlf)
  364.         int     21
  365.         pop     ax
  366.         ret
  367.  
  368. error   mov     ah,09
  369.         int     21
  370.         int     20
  371.  
  372. flag    push    bx
  373. @16     mov     ah,00
  374.         int     16
  375.         mov     ah,0e
  376.         mov     bx,0007
  377.         int     10
  378.         cmp     al,'Y'
  379.         je      @15
  380.         cmp     al,'y'
  381.         je      @15
  382.         cmp     al,'N'
  383.         je      @17
  384.         cmp     al,'n'
  385.         je      @17
  386.         mov     ah,09
  387.         mov     dx,offset(bs)
  388.         int     21
  389.         jmps    @16
  390. @15     mov     al,01
  391.         jmps    @18
  392. @17     mov     al,00
  393. @18     pop     bx
  394.         ret
  395.  
  396. readdat mov     di,offset(date)
  397. @2a     call    readnum
  398.         cmp     al,1f
  399.         jna     @a
  400.         mov     ah,09
  401.         mov     dx,offset(backerr)
  402.         int     21
  403.         jmps    @2a
  404. @a      stosb
  405.         mov     ah,09
  406.         mov     dx,offset(slash)
  407.         int     21
  408. @2b     call    readnum
  409.         cmp     al,0c
  410.         jna     @8
  411.         mov     ah,09
  412.         mov     dx,offset(backerr)
  413.         int     21
  414.         jmps    @2b
  415. @8      stosb
  416.         mov     ah,09
  417.         mov     dx,offset(slash)
  418.         int     21
  419.         call    readnum
  420.         stosb
  421.         mov     ah,09
  422.         mov     dx,offset(crlf)
  423.         int     21
  424.         ret
  425.  
  426. ;AL=NUMBER
  427. shownum push    ax
  428.         push    bx
  429.         mov     ah,00
  430.         mov     bl,0a
  431.         div     bl
  432.         cmp     al,00
  433.         je      @31
  434.         push    ax
  435.         mov     ah,0e
  436.         add     al,30
  437.         mov     bx,0007
  438.         int     10
  439.         pop     ax
  440. @31     mov     al,ah
  441.         add     al,30
  442.         mov     ah,0e
  443.         mov     bx,0007
  444.         int     10
  445.         pop     bx
  446.         pop     ax
  447.         ret
  448.  
  449. readnum mov     ah,00
  450. @6      int     16
  451.         cmp     al,30
  452.         jb      @6
  453.         cmp     al,39
  454.         ja      @6
  455.         mov     ah,0e
  456.         mov     bx,0007
  457.         int     10
  458.         sub     al,30
  459.         mov     bl,0a
  460.         mul     bl
  461.         mov     bl,al
  462.         mov     ah,00
  463. @7      int     16
  464.         cmp     al,30
  465.         jb      @7
  466.         cmp     al,39
  467.         ja      @7
  468.         mov     ah,0e
  469.         push    bx
  470.         mov     bx,0007
  471.         int     10
  472.         pop     bx
  473.         sub     al,30
  474.         add     al,bl
  475.         ret
  476.  
  477. backerr db      07 08 08 '$'
  478. bs      db      08 20 08 '$'
  479. crlf    db      0a 0d '$'
  480. datanam db      'DIARY.DAT' 00
  481. datanf  db      'DIARY.DAT not found' 0a 0d '$'
  482. delete  db      0a 0d 'Delete this entry? $'
  483. askdate db      'Enter date (DD/MM/YY): $'
  484. headtxt db      'Diary - Written by Bert Greevenbosch for Magic Software' 0a 0d
  485.         db      'Public Domain Version' 0a 0d '$'
  486. message db      'Enter message to display on that date: $'
  487. slash   db      '/$'
  488. space   db      ' $'
  489. syntax  db      0a 0d 'Syntax: DIARY [A/D/O/S/!]' 0a 0a 0d 'A = Add' 0a 0d 'D = Delete' 0a 0d 'O = Delete all decayed dates' 0a 0d 'S = Show all dates' 0a 0d '! = Warn' 0a 0d '$'
  490. tempnam db      'DIARY.TMP' 00
  491. unpar   db      'Unknown parameter' 0a 0d '$'
  492. wdel    db      'Enter date to delete from (DD/MM/YY): $'
  493. -
  494. cdate   ds      3
  495. thandle dw      ?
  496. ;the record
  497. date    ds      3
  498. tsize   db      ?
  499. txt     ds      100
  500.